package ui

import (
	"gioui.org/layout"
	"gioui.org/unit"
	"gioui.org/widget/material"
	"image/color"
)

type MessageLabel struct {
	label *material.LabelStyle
	th    *material.Theme

	msg string
	clr color.NRGBA

	prefix string
}

func NewMessageLabel(th *material.Theme) *MessageLabel {
	label := material.Label(th, unit.Sp(15), "")
	return &MessageLabel{
		th:     th,
		label:  &label,
		prefix: "",
	}
}

func (ml *MessageLabel) Error(msg string) {
	ml.clr = color.NRGBA{255, 0, 0, 255}
	ml.prefix = "Error: "
	ml.msg = msg
}

func (ml *MessageLabel) Warn(msg string) {
	ml.clr = color.NRGBA{255, 255, 0, 255}
	ml.prefix = "Warning: "
	ml.msg = msg
}

func (ml *MessageLabel) Success(msg string) {
	ml.clr = color.NRGBA{0, 255, 0, 255}
	ml.prefix = "Success: "
	ml.msg = msg
}

func (ml *MessageLabel) Info(msg string) {
	ml.clr = color.NRGBA{0, 0, 0, 255}
	ml.prefix = "Info: "
	ml.msg = msg
}

func (ml *MessageLabel) SetText(fg color.NRGBA, msg string) {
	ml.clr = fg
	ml.prefix = ""
	ml.msg = msg
}

func (ml *MessageLabel) ClearMsg() {
	ml.SetText(color.NRGBA{0, 0, 0, 255}, "")
}

func (ml *MessageLabel) Layout(gtx layout.Context) layout.Dimensions {
	ml.label.Color = ml.clr
	ml.label.Text = ml.prefix + ml.msg
	return ml.label.Layout(gtx)
}
